package com.atguigu.redis;

import redis.clients.jedis.Jedis;

import java.util.Random;
import java.util.Scanner;

public class Phone {
    public static void main(String[] args) {
        //1、输入手机号
        Scanner input = new Scanner(System.in);
        System.out.println("请输入手机号码：");
        String phone = input.next();
        //2.点击发送后随机生成6位数字码，2分钟有效
        System.out.println("输入1完成发送：");
        input.next();
        String code = sendPhone(phone);
        if("-1".equals(code)){
            System.out.println("今天输入验证码已经超过3次，请明天再试");
            return;
        }
        System.out.println("验证码是："+code);
        //3、输入验证码，点击验证，返回成功或失败
        System.out.println("请输入验证码：");
        String myCode = input.next();
        System.out.println("输入1进行验证");
        input.next();
        boolean flag = verifyCode(phone,myCode);
        //4.输出结果
        if(flag){
            System.out.println("成功");
        }else{
            System.out.println("失败");
        }
    }
    /**     * 进行验证     */
    private static boolean verifyCode(String phone, String myCode) {
        boolean flag = false;//默认失败
        Jedis jedis = new Jedis("192.168.20.200",6379);
        //1.获取保存在redis中的正确验证码
        String codeKey = "code:"+phone;
        String code = jedis.get(codeKey);
        //2.
        if(myCode.equals(code)){
            flag = true;
        }
        jedis.close();
        return flag;
    }
    /**
     * 发送手机号码，返回验证码
     */
    public static String sendPhone(String phone) {
        Jedis jedis = new Jedis("192.168.20.200",6379);
        //1.获取验证码
        String code = getCode();
        //2.将验证码保存在redis中，两分钟有效
        String codeKey = "code:"+phone;
        jedis.setex(codeKey,120,code);
        //3.每个手机号每天只能输入3次
        String countKey = "count:"+phone;
        String count = jedis.get(countKey);
        if(count==null){ //如果是第一次,设置次数为1次
            jedis.setex(countKey,24*60*60,"1");
        }else if(Integer.parseInt(count)<=2){ //如果是第二次或者第三次,设置次数+1
            jedis.incr(countKey);
        }else{//如果超过3次,给出次数超过的提示
            //code ="今天输入验证码已经超过3次，请明天再试";
            code="-1";
        }
        jedis.close();
        //4.返回结果(验证码或者超过3次提示)
        return code;
    }
    //生成6位数字验证码
    public static String getCode() {
        Random random = new Random();
        String code = "";
        for(int i=0;i<6;i++) {
            int rand = random.nextInt(10);
            code += rand;
        }
        return code;
    }
}

